/** ***********************************************************************************
* @file         usb_task.c
* @brief        USB数据处理任务
* @details      处于用来处理USB底层数据接收/发送等操作
* @author       杨小珛
* @date         2020/2/18
* @copyright    北京高知科技有限公司    
* @version      V1.0
* @attention    无
**************************************************************************************/

#ifndef USB_TASK_H
#define USB_TASK_H

#include "os_app.h"

#define  USB_DATA_RECV_WAIT_TIME    ( 3000 )
#define  USB_DATA_RECV_BUF_SIZE     ( 1500 )
#define  USB_DATA_RECV_QUEUE_MAX_NUM    20

/****************************************************************************************
* USB数据结构体
******************************************************************************************/
typedef  struct
{
    uint16_t len;
    uint8_t  *data;
}usb_recv_buf_typedef;


/** ****************************************************************************
* @remarks       void usb_create_task( unsigned portBASE_TYPE uxPriority )
* @brief         创建USB基层数据处理任务
* @param[in]     uxPriority 优先级
* @param[out]    无
* @return        无
* @attention     在系统启动后进行创建
*******************************************************************************/
extern void usb_create_task( unsigned portBASE_TYPE uxPriority );

/** ****************************************************************************
* @remarks       uint32_t usb_data_recv_sam_get( uint8_t *data , uint16_t len )
* @brief         USB底层发送数据
* @param[in]     *data 发送数据的源地址
* @param[in]     len 发送数据的长度
* @param[out]    无
* @return        pdPASS 发送数据成功 ， pdFAIL 发送数据失败
* @attention     带有互锁机制，支持多任务使用；
*******************************************************************************/
extern uint32_t usb_driver_send_data( uint8_t *data , uint16_t len );

/** ****************************************************************************
* @remarks       uint32_t usb_driver_recv_data( uint8_t *data , uint16_t *len , uint32_t time)
* @brief         USB底层发送数据
* @param[in]     time 读取数据阻塞的时间 单位ms
* @param[out]    *data 目标地址
* @param[out]    *len 数据长度
* @return        pdPASS 接收数据成功 ， pdFAIL 接收数据失败
* @attention     函数内部有阻塞功能，可以通过设置时间选择阻塞的时间长度，为0时一直阻塞
*******************************************************************************/
extern uint32_t usb_driver_recv_data( uint8_t *data , uint16_t *len , uint32_t time);

#endif

